winsafe\taskschd\com_interfaces/
itaskservice.rs

1#![allow(non_camel_case_types, non_snake_case)]
2
3use crate::decl::*;
4use crate::ole::privs::*;
5use crate::prelude::*;
6use crate::taskschd::vts::*;
7
8com_interface! { ITaskService: "2faba4c7-4da9-4013-9697-20cc3fd40f85";
9	/// [`ITaskService`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nn-taskschd-itaskservice)
10	/// COM interface.
11	///
12	/// Automatically calls
13	/// [`Release`](https://learn.microsoft.com/en-us/windows/win32/api/unknwn/nf-unknwn-iunknown-release)
14	/// when the object goes out of scope.
15	///
16	/// # Examples
17	///
18	/// ```no_run
19	/// use winsafe::{self as w, prelude::*, co};
20	///
21	/// let obj = w::CoCreateInstance::<w::ITaskService>(
22	///     &co::CLSID::TaskScheduler,
23	///     None::<&w::IUnknown>,
24	///     co::CLSCTX::INPROC_SERVER,
25	/// )?;
26	/// # w::HrResult::Ok(())
27	/// ```
28}
29
30impl oleaut_IDispatch for ITaskService {}
31impl taskschd_ITaskService for ITaskService {}
32
33/// This trait is enabled with the `taskschd` feature, and provides methods for
34/// [`ITaskService`](crate::ITaskService).
35///
36/// Prefer importing this trait through the prelude:
37///
38/// ```no_run
39/// use winsafe::prelude::*;
40/// ```
41pub trait taskschd_ITaskService: oleaut_IDispatch {
42	/// [`ITaskService::Connect`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-connect)
43	/// method.
44	fn Connect(
45		&self,
46		server_name: Option<&str>,
47		user: Option<&str>,
48		domain: Option<&str>,
49		password: Option<&str>,
50	) -> HrResult<()> {
51		ok_to_hrresult(unsafe {
52			(vt::<ITaskServiceVT>(self).Connect)(
53				self.ptr(),
54				Variant::from_opt_str(server_name).to_raw()?,
55				Variant::from_opt_str(user).to_raw()?,
56				Variant::from_opt_str(domain).to_raw()?,
57				Variant::from_opt_str(password).to_raw()?,
58			)
59		})
60	}
61
62	/// [`ITaskService::get_Connected`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_connected)
63	/// method.
64	#[must_use]
65	fn get_Connected(&self) -> HrResult<bool> {
66		let mut connected = i16::default();
67		ok_to_hrresult(unsafe {
68			(vt::<ITaskServiceVT>(self).get_Connected)(self.ptr(), &mut connected)
69		})
70		.map(|_| connected != 0)
71	}
72
73	fn_com_bstr_get! { get_ConnectedDomain: ITaskServiceVT;
74		/// [`ITaskService::get_ConnectedDomain`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_connecteddomain)
75		/// method.
76	}
77
78	fn_com_bstr_get! { get_ConnectedUser: ITaskServiceVT;
79		/// [`ITaskService::get_ConnectedUser`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_connecteduser)
80		/// method.
81	}
82
83	/// [`ITaskService::get_HighestVersion`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_highestversion)
84	/// method.
85	#[must_use]
86	fn get_HighestVersion(&self) -> HrResult<u32> {
87		let mut ver = 0u32;
88		ok_to_hrresult(unsafe {
89			(vt::<ITaskServiceVT>(self).get_HighestVersion)(self.ptr(), &mut ver)
90		})
91		.map(|_| ver)
92	}
93
94	fn_com_bstr_get! { get_TargetServer: ITaskServiceVT;
95		/// [`ITaskService::get_TargetServer`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-get_targetserver)
96		/// method.
97	}
98
99	/// [`ITaskService::GetFolder`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-getfolder)
100	/// method.
101	#[must_use]
102	fn GetFolder(&self, path: &str) -> HrResult<ITaskFolder> {
103		let mut queried = unsafe { ITaskFolder::null() };
104		ok_to_hrresult(unsafe {
105			(vt::<ITaskServiceVT>(self).GetFolder)(
106				self.ptr(),
107				BSTR::SysAllocString(path)?.as_ptr(),
108				queried.as_mut(),
109			)
110		})
111		.map(|_| queried)
112	}
113
114	/// [`ITaskService::NewTask`](https://learn.microsoft.com/en-us/windows/win32/api/taskschd/nf-taskschd-itaskservice-newtask)
115	/// method.
116	#[must_use]
117	fn NewTask(&self) -> HrResult<ITaskDefinition> {
118		let mut queried = unsafe { ITaskDefinition::null() };
119		ok_to_hrresult(unsafe {
120			(vt::<ITaskServiceVT>(self).NewTask)(self.ptr(), 0, queried.as_mut())
121		})
122		.map(|_| queried)
123	}
124}